package com.yaoxiaowen.utils;

import java.util.Random;

public class Utils_Random {
	static Random mRandom = new Random(System.currentTimeMillis());
	
	/**
	 * 得到 长度为 length的 完全是 数字 组成的字符串
	 */
	public static String getDigit(int length) {
		StringBuilder sb = new StringBuilder();
		for (int i=0; i<length; i++){
			sb.append(getDigit());
		}
		return sb.toString();
	}
	
	/**
	 * 得到 长度为 length的 完全是  a-z A-Z 组成的字符串
	 */
	public static String getString(int length) {
		StringBuilder sb = new StringBuilder();
		for (int i=0; i<length; i++){
			sb.append(getChar());
		}
		return sb.toString();
	}
	
	/**
	 * 得到 长度为 length的 完全是  a-z A-Z 0-9 组成的字符串
	 */
	public static String getStringWithDigit(int length) {
		StringBuilder sb = new StringBuilder();
		for (int i=0; i<length; i++){
			if (mRandom.nextBoolean()){
				sb.append(getChar());
			}else {
				sb.append(getChar());
			}
		}
		return sb.toString();
	}
	
	/**
	 * 得到 长度为 length的 是  a-z A-Z 0-9 以及 标签符号 组成的字符串
	 */
	public static String getStringWithDigitPunctuation(int length) {
		StringBuilder sb = new StringBuilder();
		for (int i=0; i<length; i++){
			switch (mRandom.nextInt(3)) {
				case 0:
					sb.append(getDigit());
					break;
				case 1:
					sb.append(getChar());
					break;
				default:
					sb.append(getPunctuation());
			}
		}
		return sb.toString();
	}
	
	/**
	 * 得到 0-9之间的 随机 一个随机数
	 * @return
	 */
	public static int getDigit(){
		return mRandom.nextInt(10);
	}
	
	/**
	 * 得到 a-z, A-Z之间的 随机 一个字符
	 * @return
	 */
	public static char getChar(){
		try {
			if (mRandom.nextBoolean()){
				return (char)(mRandom.nextInt(26) + 65);
			}else {
				return (char)(mRandom.nextInt(26) + 97);
			}
		} catch (Exception e) {
			// TODO: handle exception
			throw e;
		}
	}
	
	/**
	 * 得到 一个随机的 标点符号。。（参考ASCII表）
	 * @return
	 */
	public static char getPunctuation(){
		switch (mRandom.nextInt(4)) {
			case 0:
				return (char)(mRandom.nextInt(15)+33);
			case 1:
				return (char)(mRandom.nextInt(7)+58);
			case 2:
				return (char)(mRandom.nextInt(6)+91);
			default:
				return (char)(mRandom.nextInt(4)+126);
		}
	}
	

}
